#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 函数：模拟FIFO（先进先出）页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
fifo_page_replacement (char *queue_frames, int num)
{
  // TODO
  int *frames = malloc(num * sizeof(int));
  for (int i = 0; i < num; i++) {
      frames[i] = -1;
  }

  int next_replace = 0;
  int page_faults = 0;

  int len = strlen(queue_frames);

  for (int i = 0; i < len; i++) {
      char page_char = queue_frames[i];
      int page = page_char - '0';
      if (page < 0) continue;

      int hit = 0;
      for (int j = 0; j < num; j++) {
          if (frames[j] == page) {
              hit = 1;
              break;
          }
      }
      if (!hit) {
          frames[next_replace] = page;
          next_replace = (next_replace + 1) % num;
          page_faults++;
      }

      printf("Access:%d,Frames: [", page);
          for (int k = 0; k < num; k++) {
            printf("%d", frames[k]);
            if (k != num - 1) printf(",");
          }
          printf("]\n");
  }
  free(frames);
}
